﻿<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title xmlns:d="http://docbook.org/ns/docbook" xmlns:rf="java:org.jboss.highlight.XhtmlRendererFactory">附录 B. 输出速率限制的运行时考虑因素</title>
	<link rel="stylesheet" href="css/espertech.css" type="text/css">
	<meta xmlns:d="http://docbook.org/ns/docbook" xmlns:rf="java:org.jboss.highlight.XhtmlRendererFactory" name="generator" content="DocBook XSL-NS Stylesheets V1.74.0">
	<meta xmlns:d="http://docbook.org/ns/docbook" xmlns:rf="java:org.jboss.highlight.XhtmlRendererFactory" http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<link rel="home" href="index.html" title="Esper参考文档">
	<link rel="up" href="index.html" title="Esper参考文档">
	<link rel="prev" href="appendix_outputspec.html" title="附录 A. 输出参考和示例">
	<link rel="next" href="appendix_keywords.html" title="附录 C. 保留关键字">
</head>

<body>
	<p xmlns:d="http://docbook.org/ns/docbook" id="title"><a href="./index.html" class="site_href"><strong>www.espertech.com</strong></a><a href="http://www.espertech.com/esper/esper-documentation/" class="doc_href"><strong>文档</strong></a></p>
	<ul xmlns:d="http://docbook.org/ns/docbook" class="docnav">
		<li class="previous"><a accesskey="p" href="appendix_outputspec.html"><strong>上一页</strong></a></li>
		<li class="next"><a accesskey="n" href="appendix_keywords.html"><strong>下一页</strong></a></li>
	</ul>
	<div class="appendix" lang="en-US">
		<div class="titlepage">
			<div>
				<div>
					<h2 class="title"><a id="appendix_outputlimit"></a>附录 B. 输出速率限制的运行时考虑因素</h2>
				</div>
			</div>
		</div>
		<p>
			输出速率限制以固定间隔向您的应用程序提供输出事件。在间隔期间，运行时可能会使用缓冲区来保存数据，直到满足输出条件(如下所述)。
			如果您的应用程序有高容量流，您可能需要特别注意缓冲区的内存需求，特别是当输出条件触发不频繁时。
		</p>
		<p>
			带有<code class="literal">snapshot</code>关键字的<code class="literal">output</code>子句不需要为任何类型的语句使用缓冲区。
		</p>
		<p>
			带有<code class="literal">first</code>关键字的<code class="literal">output</code>子句不需要为任何类型的语句使用缓冲区。
		</p>
		<p>
			我们使用术语<em>变更集</em>来描述自上次触发输出条件以来发生的所有插入和移除流事件。
		</p>
		<p>
			您可以通过指定提示来覆盖某些类型语句的默认行为。
		</p>
		<p>
			有关下面讨论的语句类型的信息，请参见<a class="xref" href="processingmodel.html#processingmodel_aggregation" title="2.15. 基本聚合语句类型">第2.15节"基本聚合语句类型"</a>。
		</p>
		<div class="sect1" lang="en-US">
			<div class="titlepage">
				<div>
					<div>
						<h2 class="title"><a id="epl-output-unaggandungrouped"></a>B.1. 对于非聚合和非分组语句</h2>
					</div>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-unaggandungrouped-last"></a>B.1.1. <code class="literal">输出最后</code></h3>
						</div>
					</div>
				</div>
				<p>
					对于定义<code class="literal">output last</code>的语句，运行时仅保留第一个移除流事件和最后一个插入流事件(如果存在<code class="literal">having</code>子句则需匹配)，
					以便在输出条件触发时计算插入和移除流输出。
				</p>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-unaggandungrouped-all"></a>B.1.2. <code class="literal">输出全部</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当任何行到达时，运行时应用<code class="literal">having</code>子句并仅保留匹配事件，如果没有<code class="literal">having</code>子句则保留所有事件。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时根据<code class="literal">select</code>子句计算插入和移除流输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
		</div>
		<div class="sect1" lang="en-US">
			<div class="titlepage">
				<div>
					<div>
						<h2 class="title"><a id="epl-output-fullyaggandungrouped"></a>B.2. 对于完全聚合和非分组语句</h2>
					</div>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-fullyaggandungrouped-last"></a>B.2.1. <code class="literal">输出最后</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当自上次触发输出条件以来的第一行到达时，运行时根据<code class="literal">select</code>子句计算移除流输出事件以备后续输出(适用时)。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时根据<code class="literal">select</code>子句计算插入流输出事件进行输出。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-fullyaggandungrouped-all"></a>B.2.2. <code class="literal">输出全部</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当行到达时，运行时应用<code class="literal">having</code>子句并根据<code class="literal">select</code>子句计算插入和移除流输出事件以备后续输出(适用时)。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时输出插入和移除流输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
		</div>
		<div class="sect1" lang="en-US">
			<div class="titlepage">
				<div>
					<div>
						<h2 class="title"><a id="epl-output-aggandungrouped"></a>B.3. 对于聚合和非分组语句</h2>
					</div>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-aggandungrouped-last"></a>B.3.1. <code class="literal">输出最后</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当自上次触发输出条件以来的第一行到达时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句计算插入和移除流输出事件以备后续输出(适用时)，
								仅保留最后计算的插入和移除流输出事件。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时输出预先计算的最后插入流和移除流输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-aggandungrouped-all"></a>B.3.2. <code class="literal">输出全部</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当行到达时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句计算插入和移除流输出事件以备后续输出，
								仅保留计算的插入和移除流输出事件。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时输出保留的输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
		</div>
		<div class="sect1" lang="en-US">
			<div class="titlepage">
				<div>
					<div>
						<h2 class="title"><a id="epl-output-fullyaggandgrouped"></a>B.4. 对于完全聚合和分组语句(包括Rollup)</h2>
					</div>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-fullyaggandgrouped-last"></a>B.4.1. <code class="literal">输出最后</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当自上次触发输出条件以来的第一行到达某个组时，运行时根据<code class="literal">select</code>子句计算该组的移除流输出事件以备后续输出(适用时)，
								并为每个组保留一个插入流事件。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时使用每个组保留的插入流事件根据<code class="literal">select</code>子句计算输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-fullyaggandgrouped-all"></a>B.4.2. <code class="literal">输出全部</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时为每个组保留一行来代表该组。
							</p>
						</li>
						<li>
							<p>
								当行到达时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句计算移除流输出事件以备后续输出。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句为每个组计算插入流输出事件进行输出。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
		</div>
		<div class="sect1" lang="en-US">
			<div class="titlepage">
				<div>
					<div>
						<h2 class="title"><a id="epl-output-aggandgrouped"></a>B.5. 对于聚合和分组语句</h2>
					</div>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-aggandgrouped-last"></a>B.5.1. <code class="literal">输出最后</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								当自上次触发输出条件以来的第一行到达某个组时，运行时根据<code class="literal">select</code>子句计算该组的插入和移除流输出事件以备后续输出(适用时)，
								并为每个组保留最后一个插入和移除流事件。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时输出每个组保留的插入和移除流输出事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
			<div class="sect2" lang="en-US">
				<div class="titlepage">
					<div>
						<div>
							<h3 class="title"><a id="epl-output-aggandgrouped-all"></a>B.5.2. <code class="literal">输出全部</code></h3>
						</div>
					</div>
				</div>
				<p>
					没有order-by子句时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时为每个组保留一行来代表该组。
							</p>
						</li>
						<li>
							<p>
								当行到达时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句计算插入和移除流输出事件以备后续输出。
							</p>
						</li>
						<li>
							<p>
								当输出条件触发时，运行时根据<code class="literal">having</code>子句(如果存在)和<code class="literal">select</code>子句为每个尚未有输出事件的组计算插入流输出事件进行输出，
								并输出所有事件。
							</p>
						</li>
					</ul>
				</div>
				<p>
					有order-by子句或当您的EPL指定<code class="literal">@Hint('disable_outputlimit_opt')</code>提示时:
				</p>
				<div class="itemizedlist">
					<ul compact="compact">
						<li>
							<p>
								运行时保留变更集并在输出条件触发时从变更集计算输出，之后丢弃变更集。
							</p>
						</li>
					</ul>
				</div>
			</div>
		</div>
	</div>
	<ul xmlns:d="http://docbook.org/ns/docbook" class="docnav">
		<li class="previous"><a accesskey="p" href="appendix_outputspec.html"><strong>上一页</strong>附录 A. 输出参考和示例</a></li>
		<li class="up"><a accesskey="u" href="#"><strong>页首</strong></a></li>
		<li class="home"><a accesskey="h" href="index.html"><strong>首页</strong></a></li>
		<li class="next"><a accesskey="n" href="appendix_keywords.html"><strong>下一页</strong>附录 C. 保留关键字</a></li>
	</ul>
</body>

</html>